package com.hanamaki.demo02;

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import org.openqa.selenium.By;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.concurrent.TimeUnit;

public class AppiumSwipe {
    static AndroidDriver<WebElement> driver;
    @BeforeMethod
    public void setUp() throws MalformedURLException {
//        1. 创建配置对象   new
        DesiredCapabilities cp = new DesiredCapabilities();
//          添加配置信息
        cp.setCapability("deviceName", "127.0.0.1:62001");
        cp.setCapability("platformName", "Android");
        cp.setCapability("appPackage", "com.iBookStar.activityOff");
        cp.setCapability("appActivity", "com.iBookStar.activityOff.Splash");
//        如何启动？
//        驱动 对象
        URL url = new URL("http://localhost:4723/wd/hub");
//        注册 需要打开的 驱动 以及url 以及 对应的软件
        driver = new AndroidDriver<>(url, cp);

        WebDriver.Timeouts timeouts = driver.manage().timeouts();
        timeouts.implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void test() throws InterruptedException {

//        如何 点击 开始体验？ 定位元素  ？  com.iBookStar.activityOff:id/go
//        注意时序问题
//        强制等待
        Thread.sleep(3000);
        WebElement id = driver.findElement(By.id("com.iBookStar.activityOff:id/go"));
        id.click();

//        com.iBookStar.activityOff:id/cancel   忽略本次

        driver.findElement(By.id("com.iBookStar.activityOff:id/cancel")).click();

//        点击 文件管理
        driver.findElementByAndroidUIAutomator("new UiSelector().text(\"文件管理\")").click();

        Thread.sleep(3000);

//        滑动
//        5.0 之前的版本
//        driver.swipe(开始坐标X轴, 开Y, 结束坐标X轴, Y, 滑动所需要的时间);
//        driver.swipe(610, 500, 100, 500, 1000);

//        5.0 之后的版本
//        在 5.0 之后 需要接住 PointOption对象来滑动
//        需要使用  事件（手）
        TouchAction hand = new TouchAction(driver);

//        设置 需要滑动的坐标
        PointOption start = PointOption.point(610, 500);
        PointOption end = PointOption.point(100, 500);

//        执行滑动 从第一个点滑动 到 第二个点  需要多长时间
        Duration duration = Duration.ofMillis(800);
        WaitOptions waitOptions = WaitOptions.waitOptions(duration);
        hand.press(start).waitAction(waitOptions).moveTo(end).release().perform();


    }

    @AfterMethod
    public void release() {
        driver.quit();
    }

}
